home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
compuserve-file-archive
/
05 Programming
/
ULTDIRSC.SDA
/
EQUATES & SETUP
next >
Wrap
Text File
|
2019-04-13
|
10KB
|
281 lines
;THE COMPLETE SOURCE FOR ╒╠╘─╔╥2 CONSISTS OF TWO PARTS
; PART ONE: EQUATES & PREP
; PART TWO: MAIN.CODE
;
; THIS IS PART ONE
;
;-------------------------------------------------------------------------
; USING THE ╒╠╘─╔╥2 PROGRAM
;
; THE PROGRAM IS USED FROM ┬┴╙╔├ WITH A COMMAND OF THE
; FOLLOWING FORM
;
; SYSAD,VN,TY$
;
; WHERE:
; AD IS THE ENTRANCE ADDRESS. ╘HIS IS THE SAME AS
; THE PROGRAM'S LOAD ADDRESS. ╘HE TERM "AD" MAY BE
; BE A CONSTANT OR A VARIABLE.
;
; VN IS THE NAME OF THE STRING VARIABLE INTO WHICH THE
; SELECTED FILENAME IS TO BE PLACED FOR USE BY THE
; ┬┴╙╔├ PROGRAM THAT CALLS IT. ╬OTE THAT THE "$" IS
; NOT USED HERE.
;
; TY$ IS THE NAME OF A STRING THAT CONTAINS THE TYPE OF FILE
; TO BE DISPLAYED. ╘HE STRING NAME CAN BE ONE OR TWO
; CHARACTERS. ╘HE FOLLOWING CAN BE USED ON 1541 AND 1571
; DRIVES. ╘HIS LIST IS NOT EXHAUSTIVE, AND SOME OTHERS WILL
; WORK ON ├═─ HARD DRIVES. ╘HE '$' IS USED HERE. ╧NLY THE
; FIRST BYTE OF THE STRING IS USED.
;
;
; S FOR ╙┼╤UENTIAL FILES
; P FOR ╨╥O╟RAM FILES
; U FOR ╒╙E╥ FILES
; R FOR ╥┼╠ATIVE FILES
; A FOR ┴LL FILES
; C FOR ├┬═ (PARTITION) ENTRIES
;
; ╔F THE TYPE STRING NAMED HERE HAS NOT BEEN DEFINED, OR
; IT IS A NULL STRING (LENGTH ZERO) AN ╔╠╠┼╟┴╠ ╤╒┴╬╘╔╘┘
; ERROR WILL BE THE RESULT.
;
;
;-------------------------------------------------------------------------
;BY R.W. (BOB K7) KOBER
; FOR MILADY
; JULY 19, 1986
;
; MODIFIED BY KURT BRANDON
; AS FOLLOWS
;
; 24 ╞EBRUARY 1990 MODIFIED FOR RELOCATABILITY
; 19 ╧CTOBER 1990 MODIFIED TO PREVENT FILE SIZES WITH MORE THAN THREE
; DIGITS FROM DISTURBING THE REVERSE FIELD OF THE
; FILENAME
; 13 ─ECEMBER 1992 MODIFIED TO BE ABLE TO SEND DISK COMMANDS
; 2 ╩ANUARY 1993 MODIFIED TO GET THE FILETYPE FROM A STRING VARIABLE
;
;*=$C000 ;DEC 49152
;.OBJ "@:ULTRADIR.ML"
;
;--- EQUATES ---
;
BDRCOL = $D020 ; BORDER COLOR
BEGSTR = $33 ; POINTER TO BEGINNING OF STRING POOL
BGCOLO = $D021 ; BACKGROUND COLOR
CHKCOM = $AEFD ; CHECK FOR COMMA
CHKIN = $FFC6 ; SET CHANNEL FOR INPUT
CHKOUT = $FFC9 ; SET CHANNEL FOR OUTPUT
CHRGET = $0073 ; GET BASIC BYTE
CHRIN = $FFCF ; INPUT A CHARACTER
CHROUT = $FFD2 ; OUTPUT A CHARACTER
CLOSE = $FFC3 ; CLOSE FILE
CLRCHN = $FFCC ; CLEAR I/O CHANNELS
CLRLINE = $E9FF ; CLEAR SCREEN LINE
CLRSCN = $E544 ; BASIC'S CLR/HOME
COLOR = $0286 ; CHARACTER COLOR
CRSR'ON = $CC ; 0=CURSOR ON <>0=CURSOR OFF
CRSR'RV = $CF ; 1=CURSOR IN REVERSE PHASE 0=NOT
CURCOL = $D3 ; CURSOR COLUMN
CURLIN = $D6 ; CURRENT CURSOR LINE
DESCADD = $47 ; DESCRIPTOR ADDRESS
DEVNUM = $BA ; DEVICE NUMBER
ERRMSG = $A437 ; ERROR MESSAGE GENERATOR
FINDVAR = $AF28 ; FIND VARIABLE AND GET ITS VALUE
GETIN = $FFE4 ; GET A BYTE FROM THE KEYBOARD
HOME = $E566 ; HOME THE CRSR
KEYCNT = $C6 ; NUMBER OF BYTES IN KEYBOARD BUFFER
LINADD = $D1 ; CURRENT-LINE ADDRESS
LINPRT = $BDCD ; OUTPUT A NUMBER
MAKDES = $B0E7 ; SET UP A DESCRIPTOR
MATRIX = $CB ; KEYPRESS MATRIX
MOVSTR = $B688 ; COPY STRING TO POOL
OPEN = $FFC0 ; OPEN A FILE
PLOT = $FFF0 ; SET CRSR POSITION
RETURN = $A3B7 ; ROM RTS COMMAND
SETLFS = $FFBA ; SET LOGICAL FILE NUMBER
SETNAM = $FFBD ; SET FILE NAME
SETPTR = $B4F4 ; SET STRING POOL POINTER
SHFLG = $028D ; SHIFT FLAG
STACK = $0100 ; STACK START ADDRESS
STATUS = $90 ; I/O STATUS BYTE
VARNAME = $45 ; NAME FOR ASSIGNMENT
:
:
:
WRKSPC = $0200 ; PROGRAM WORK SPACE
FILNAME = WRKSPC ; FILENAME SELECTED
TYPE = WRKSPC+$1A ; FILE TYPE BYTE
DMSK = WRKSPC+$15 ; DIRECTORY MASK
VARS = WRKSPC+$1B ;
FIRSTQ = VARS ; FILENAME QUOTE FLAG
CHRSTOR = VARS+1 ; INTERMEDIATE STORAGE FOR BYTE BEING TRANSLATED
DIREND = VARS+2 ; END-OF-DIRECTORY FLAG
NOLINE = VARS+3 ; DIRECTORY LINE COUNTER
UPFLG = VARS+4 ; FLAG, CURSOR UP
NAMLEN = VARS+5 ; FILENAME LENGTH
SUPBLN = VARS+6 ; FLAG FOR SUPRESSION OF BLANKS
YSTOR = VARS+7 ; .┘ REGISTER STORAGE
RTYPE = VARS+8 ; FILETYPE SELECTED
MENUFLG = VARS+9 ; FLAG FOR MENU
MODE = VARS+$A ; USED TO CONTROL THE USAGE OF THE SCREEN-CODE
; TO PETASCII SUBROUTINE
LINLEN = VARS+$B ; LENGTH OF DISK-COMMAND LINE
CURPOS = VARS+$C ; POSITION OF CURSOR ON DISK-COMMAND LINE
CBYTE = VARS+$D ; CONTROL BYTE FOR INCREMENTING LENGTH OF DISK
; COMMAND LINE
RNAME1 = VARS+$E ; FIRST BYTE OF RETURNED FILENAME
RNAME2 = VARS+$F ; SECOND " " " "
JTAB = WRKSPC+$30 ; JUMP TABLE START ADDRESS
;
;
; USAGE OF ┬┴╙╔├'S INPUT BUFFER
;
;ADDRESS USAGE
;
;512-527 FILENAME RETURNED
;533-537 DIRECTORY MASK PATTERN
;538 FILE TYPE BYTE
;539 QUOTE FLAG
;540 INTERMEDIATE STORAGE FOR SCREEN-CODE-TO-PETASCII CONVERSION
;541 END-OF-DIRECTORY FLAG
;542 NOLINE FLAG
;543 CURSOR-UP FLAG
;544 LENGTH OF SELECTED FILENAME
;545 FLAG FOR SUPPRESSION OF BLANKS BETWEEN SIZE AND NAME FIELDS
;546 TEMPORARY STORAGE FOR .┘
;547 TYPE OF FILE SELECTED (╙,╨,╒,╥)
;548 MENUFLG
;549 MODE BYTE USED TO CONTROL THE WAY THE SCREEN-CODE-TO-PETASCII
; TRANSLATE CODE IS USED (FILENAME VS. DISK COMMAND)
;550 HOLDS LENGTH OF DISK-COMMAND LINE
;551 HOLDS POSITION OF CURSOR ON DISK-COMMAND LINE
;552-553 NAME OF VARIABLE FOR SELECTED FILENAME
;554-559 NOT USED
;560-597 JUMP TABLE
;
; --- RELOCATING JUMP TABLE ---
;
BADSTAT.I = JTAB
TITLES.I = JTAB+$2
CRSRUP.I = JTAB+$4
CRSRDN.I = JTAB+$6
NAME1.I = JTAB+$8
MENU1.I = JTAB+$A
DOOVER.I = JTAB+$C
SETCSR.I = JTAB+$E
RVSON.I = JTAB+$10
END.I = JTAB+$12
INIT.I = JTAB+$14
MESS1.I = JTAB+$16
DSK'CMND.I = JTAB+$18
PAUSE.I = JTAB+$1A
GETKEY.I = JTAB+$1C
OUTPUT.I = JTAB+$1E
LOOP3.I = JTAB+$20
START2.I = JTAB+$22
TRANS.I = JTAB+$24
;
;--- PROGRAM STARTS HERE ---
;
LDY #88 ; CLEAR THE WORKSPACE
LDA #0
CLRBUF STA WRKSPC,Y
DEY
BNE CLRBUF
;
;
; GET THE PARAMETER LIST FROM THE BASIC TEXT
LDA #$80
STA RNAME2
JSR CHKCOM ; GET RETURN VARIABLE
STA RNAME1
JSR CHRGET ; ANOTHER LETTER (QM)
CMP #$2C ; IF ITS A COMMA, THE
BEQ + ; SECOND BYTE IS ZERO
ORA #$80 ; SET HI-BIT TO INDICATE STRING
STA RNAME2 ; STORE BYTE 2
JSR CHRGET
+ JSR CHKCOM ; LOOK FOR A COMMA
JSR FINDVAR ; GET VARIABLE NAME, FIND DESCRIPTOR
BCS ERR14 ; CARRY IS SET IF VARIABLE NOT FOUND
LDY #0
LDA (DESCADD),Y ; ADDRESS IS FOR STRING LENGTH BYTE
BEQ ERR14 ; ZERO IS AN ILLEGAL LENGTH
INY
LDA (DESCADD),Y
STA $FE
INY
LDA (DESCADD),Y
STA $FF
LDY #0
LDA ($FE),Y
BNE STORIT
ERR14 LDX #14 ; ╔╠╠┼╟┴╠ ╤╒┴╬╘╔╘┘ ERROR CODE
.BYTE $2C
ERR11 LDX #11 ; ╙┘╬╘┴╪ ERROR CODE
JMP ERRMSG ; GIVE 'EM THE GOOD NEWS!
STORIT STA TYPE ; STORE TYPE BYTE
;
;
;JUMP TABLE CONSTRUCTION
;
SEI ; DISABLE INTERRUPTS
JSR RETURN ; RETURN ADDRESS ON STACK
START TSX ; GET STACK POINTER
LDA STACK,X ; GET HI-BYTE
STA $FF
DEX
LDA STACK,X ; GET LO-BYTE
STA $FE
INC $FE
BNE +
INC $FF
;
;ADDRESS OF LABEL "START" IS NOW AT $FE, $FF
+ LDY #TABLE-START-1
CLOOP INY
LDA ($FE),Y ; GET LO-BYTE OF FIRST LABEL OFFSET
CLC
ADC $FE ; ADD START ADDRESS
STA !START-TABLE+JTAB,Y ; STORE LO-BYTE JUMP ADDRESS
INY ;
LDA ($FE),Y ; [
ADC $FF ; [ DO THE SAME FOR THE HI-BYTE
STA !START-TABLE+JTAB,Y ; [
CPY #TBLEND-START
BCC CLOOP
LDY #TBLEND-TABLE-16 ; [
LDA JTAB,Y ; [
STA $FC ; [ STORE THE ADDRESS OF THE
INY ; [ SCREEN TEXT AT $FC AND $FD
LDA JTAB,Y ; [
STA $FD ; [
CLI
SEC:BCS TBLEND
;
;TABLE OF OFFSETS FROM "START"
TABLE .WORD BADSTAT-START ; BADSTAT OFFSET
.WORD TITLES-START ; TITLES OFFSET
.WORD CRSRUP-START ; CRSRUP OFFSET
.WORD CRSRDN-START ; CRSRDN OFFSET
.WORD NAME1-START ; NAME1 OFFSET
.WORD MENU1-START ; MENU1 OFFSET
.WORD DOOVER-START ; DOOVER OFFSET
.WORD SETCSR-START ; SETCSR OFFSET
.WORD RVSON-START ; RVSON OFFSET
.WORD END-START ; END OFFSET
.WORD INIT-START ; INIT OFFSET
.WORD MESS1-START ; MESS1 OFFSET
.WORD DSK'CMND-START ; DSK'CMND OFFSET
.WORD PAUSE-START ; PAUSE OFFSET
.WORD GETKEY-START ; GETKEY OFFSET
.WORD OUTPUT-START ; OUTPUT OFFSET
.WORD LOOP3-START ; LOOP3 OFFSET
.WORD START2-START ; START2 OFFSET
.WORD TRANS-START ; TRANS OFFSET
;